package com.kevin.common.config.date;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;

import java.util.Date;

/**
 * spring mvc日期转换类 支持多种日期格式传入
 *
 * @author wh
 * @date 2021-03-16
 */
@Slf4j
@Configuration
public class DateConverter implements Converter<String, Date> {

    private static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

    /**
     * 日期格式
     */
    private static final String[] PARSE_PATTERNS = {
            "yyyy",
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM",
            UTC_PATTERN
    };

    @Override
    public Date convert(String source) {
        if (StrUtil.isEmpty(source)) {
            return null;
        }
        // 这边采用的是hutool的Date解析,备用 org.apache.commons.lang.time.DateUtils类
        return DateUtil.parse(source.trim(), PARSE_PATTERNS);
    }
}
